#include "vec2f.h"
#include <iostream>


#ifdef _MAC_OS_
#include <GLUT/glut.h>
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#else
#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glu.h>
#endif



/*vec2f::vec2f(float f) {
  setX(f);
  setY(f); 
  }*/
vec2f::vec2f(float f) {
  _x=f;
  _y=f; 
}
vec2f::vec2f(float x, float y){
  _x = x;
  _y = y;
}

vec2f::vec2f(const vec2f & s){
  _x = s._x;
  _y = s._y;
}


const float * vec2f::data(){
  return _data;
}

const float& getX() const{
  std::cerr << "Vec2f: constant access request;" << std::endl;
  return _data[0];
}
const float& getY() const{
  std::cerr << "Vec2f: constant access request;" << std::endl;		
  return _data[1];
}

void vec2f::setX(float f){
  _data[0]=f;
}
void vec2f::setY(float f){
  _data[1]=f;
}

vec2f operator+(const vec2f& v){
  return vec2f(getX() + v.getX(), getY() + v.getY());
}

vec2f operator*(const vec2f&  v){
  return vec2f(getX() * v.getX(), getY() * v.getY());
}
vec2f operator-(const vec2f& v){
 return vec2f(getX() - v.getX(), getY() - v.getY());
}
vec2f vec2f::operator/(const vec2f& v){
 	if(v._x == 0 || v._y == 0) return vec2f(0, 0);

		return vec2f(getX() / v.getX(), getY() / v.getY());
	}

const float operator[](const int a) const{
  return _data[a];
}

vec2f div(const float& diviseur, bool non_zero = true)
{
  vec2f v(*this);
  if(non_zero)
    {
      v.getX() = (const float) v.getX() / diviseur;
      v.getY() = (const float) v.getY() / diviseur;
    }
  
  return v;
}
